package Backtracking;

import java.util.ArrayList;
import java.util.List;

/*
* 78. 子集
*
* *********************
* *****start去除重复的list集合, 集合内元素排列不同也算是重复集合,即便排列顺序不同
* *****list.contains(num)去除list中重复的数字
* */
public class Subsets78 {
    List<List<Integer>> res=new ArrayList<>();
    public List<List<Integer>> subsets(int[] nums) {
        int n=nums.length;
        dfs(new ArrayList<Integer>(),nums,n,0);
        return res;
    }

    private void dfs(ArrayList<Integer> list, int[] nums, int n,int start) {
        if(list.size()<=n){  // if判断带范围, return就不能写在if里,要写在else里面 , 或者直接不写
            res.add(new ArrayList<>(list));
        }else{
            return;  //这句return必须写在这里, 不能写在上面.
        }

//        res.add(new ArrayList<>(list));
        if(list.size()>=n){return;}
        for (int i=start;i<n;i++) {
            if(!list.contains(nums[i])){
                list.add(nums[i]);
                dfs(list, nums, n,i);
                list.remove(list.size()-1);
            }
        }
    }

}
